package prostagra;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.util.Iterator;
import javax.swing.ImageIcon;
import obiekty.Gaunt;
import obiekty.Genokrad;
import obiekty.Gracz;
import obiekty.Grupa;
import obiekty.ObiektRuchomy;
import obiekty.PociskBolter;
import obiekty.Potwor;
import obiekty.Rakieta;
import obiekty.Zoanthrope;
import utils.Vector2D;
import zachowania.potwor.Szukaj;

public class Zabijanka extends Gra
{

    Mapa mapa;
    MapaRenderer renderer;
    MapoWczytywacz mapoWczytywacz;
    PociskBolter pb = null;
    Rakieta rb=null;
    boolean koniecGry = false;

    @Override
    public void init()
    {
        mapoWczytywacz = new MapoWczytywacz();
        mapa = mapoWczytywacz.wczytajMape("", 1000, 900);
        renderer = new MapaRenderer();
    }

    @Override
    public void mousePressed(MouseEvent e)
    {
        if (e.getButton() == MouseEvent.BUTTON1)
        {
            ((Gracz) mapa.getGracz()).setIdzDo(
                    mapa.wezPrawdziwaPozycje(
                    new Vector2D(e.getPoint().x, e.getPoint().y), szerokosc, wysokosc));
        } else if (e.getButton() == MouseEvent.BUTTON2){
            Gracz temp = (Gracz) mapa.getGracz();
            Vector2D cel = mapa.wezPrawdziwaPozycje(new Vector2D(e.getX(), e.getY()), szerokosc, wysokosc);
            rb = temp.sendrocketAt(cel);
        }
        
        else if (e.getButton() == MouseEvent.BUTTON3)
        {
            Gracz temp = (Gracz) mapa.getGracz();
            Vector2D cel = mapa.wezPrawdziwaPozycje(new Vector2D(e.getX(), e.getY()), szerokosc, wysokosc);
            pb = temp.shootAt(cel);
        }
    }

    @Override
    public void keyPressed(KeyEvent e)
    {
    }

    @Override
    public void draw(Graphics2D g)
    {
        renderer.draw(g, mapa, szerokosc, wysokosc);

        if (koniecGry)
        {
            g.setColor(java.awt.Color.RED);
            g.drawString("Koniec Gry", szerokosc / 4, wysokosc / 2);
        }
    }

    @Override
    public void update(long elapsedTime)
    {
        if (mapa.getGracz().getZycie() > 0)
        {
            //update gracza
            if (pb != null)
            {
                mapa.addObiektRuchomy(pb);
                pb = null;
            }
            if (rb != null)
            {
                mapa.addObiektRuchomy(rb);
                rb = null;
            }

            int rozmiarX = mapa.getSzerokoscPlanszy();
            int rozmiarY = mapa.getWysokoscPlanszy();

            mapoWczytywacz.dodajObiekty(rozmiarX, rozmiarY);

            mapa.getGracz().update(elapsedTime);


            synchronized (mapa.getObiektyRuchome())
            {
                // update wszystkich ludzików
                Iterator i = mapa.getObiektyRuchome().iterator();
                while (i.hasNext())
                {
                    ObiektRuchomy o = (ObiektRuchomy) i.next();
                    if (o.getZycie() == 0)
                    {
                        if (o.getGrupa() != null)
                        {
                            o.getGrupa().removeObiekt(o);
                            o.setGrupa(null);
                        }
                        i.remove();
                    } else
                    {
                        o.update(elapsedTime);
                    }
                }
            }
        } else
        {
            koniecGry = true;
        }
    }
}
